<?php

namespace App\Services\System;

use App\Models\System\SysMenuModel;
use App\Models\System\SysUserModel;
use App\Services\System\SysRoleService;
use App\Services\System\SysMenuService;
        
/**
* 用户权限处理
* @create 2023-08-17 21:32:42
*/
class SysPermissionService {

    /**
     * 获取角色数据权限
     * 
     * @param $user 用户信息
     * @return 角色权限信息
     */
    public static function getRolePermission(SysUserModel $user): array {
        // 管理员拥有所有权限
        if ($user->isAdmin()) {
            return ['admin'];
        } else {
            return SysRoleService::selectRolePermissionByUserId($user->user_id);
        }
    }


    
    /**
     * 获取菜单数据权限
     * 
     * @param user 用户信息
     * @return 菜单权限信息
     */
    public static function getMenuPermission(SysUserModel $user): array {
        $perms = collect();
        // 管理员拥有所有权限
        if ($user->isAdmin()) {
            $perms->push("*:*:*");
        } else {
            // $roles = $user->roles()->get()->each(function($v) {
            //     $rolePerms = SysMenu::selectMenuPermsByRoleId($v->role_id);
            //     dd($v->role_id, $rolePerms);
            // });
            $user->roles->each(function($it)use(&$perms) {
                $rolePerms = SysMenuModel::selectMenuPermsByRoleId($it->role_id);
                $perms = $perms->merge($rolePerms);
            });
            // if (!roles.isEmpty() && roles.size() > 1)
            // {
            //     // 多角色设置permissions属性，以便数据权限匹配权限
            //     for (SysRole role : roles)
            //     {
            //         Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
            //         role.setPermissions(rolePerms);
            //         perms.addAll(rolePerms);
            //     }
            // }
            // else
            // {
            //     perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
            // }
        }
        return $perms->unique()->toArray();
    }

}
